from django.db import models
from utils.utils import primaryKey
from django.conf import settings


class BaseModel(models.Model):
    id = models.BigAutoField(primary_key=True, default=primaryKey)
    tenantId = models.ForeignKey(to='tenant.Tenant', db_column="tenant_id", null=True, on_delete=models.CASCADE, db_constraint=False, verbose_name='租户')
    createUserId = models.ForeignKey(
        to=settings.AUTH_USER_MODEL,
        related_name="%(app_label)s_%(class)s_createUser",  # 动态生成反向关系名称
        db_column="create_user",
        null=True,
        on_delete=models.SET_NULL,
        db_constraint=False,
        verbose_name='创建用户'
    )
    updateUserId = models.ForeignKey(
        to=settings.AUTH_USER_MODEL,
        related_name="%(app_label)s_%(class)s_updateUser",  # 动态生成反向关系名称
        db_column="update_user",
        null=True,
        on_delete=models.SET_NULL,
        db_constraint=False,
        verbose_name='修改用户'
    )
    createTime = models.DateTimeField(db_column="create_time", auto_now_add=True, null=True, blank=True, verbose_name="创建时间")
    updateTime = models.DateTimeField(db_column="update_time", auto_now=True, null=True, blank=True, verbose_name="修改时间")
    
    class Meta:
        abstract = True

class DictBase(BaseModel):
    parentId = models.ForeignKey(to='self', db_column="parent_id", db_constraint=False, on_delete=models.CASCADE, null=True, blank=True, verbose_name="父级id")
    code = models.CharField(max_length=255, verbose_name="字典编号")
    dictText = models.CharField(max_length=255, db_column="dict_text", verbose_name="字典名")
    dictValue = models.CharField(max_length=255, null=True, blank=True, db_column="dict_value", verbose_name="字典值")
    sort = models.PositiveIntegerField(null=True, blank=True, verbose_name="排序")
    remark = models.CharField(max_length=255, null=True, blank=True, verbose_name="备注")
    '''
    是否已封存（代表把字典暂时禁用，下拉框选择的时候就不显示了。封存之前保存的数据不受影响，依旧可以查出）
    比如之前的字典项为：[1]普通会员 [2]超级会员 [3]至尊会员，用户三种会员都有下单。
    但是由于普通会员金额少，维护高，买的人少，就暂时把他封存掉，这边别人下单的时候就只能看到[2]和[3]。
    但这不影响之前购买过普通会员的人，后台查询对应单项字典的时候还是可以查出来，只是查字典列表进行选择的时候就查不到了。
    '''
    isSealed = models.SmallIntegerField(default=0, null=True, blank=True, db_column="is_sealed")   # 是否封存

    def __str__(self):
        return self.dictText
    
    class Meta:
        abstract = True
